package com.lysh.test.netty;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import lombok.extern.slf4j.Slf4j;

/**
 * @author liyishan
 * @date 2023/8/24 09:45
 * @apiNote    不好使
 */
@Slf4j
public  class MyServerHandler5 extends SimpleChannelInboundHandler<String> {

    /**
     * 客户端发消息会触发
     */
    @Override
    public void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
        System.out.println("========================[" + this.getIP(ctx) + "]收到消息：" + msg+"========================");
    }
    /**
     * 客户端连接会触发
     */
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        //添加channel信息
        System.out.println("========================[" + this.getIP(ctx) + "]已连接========================");
    }

    /**
     * 客户端断开连接会触发
     */
    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        //删除失效的channel
        ctx.close();
        System.out.println("========================[" + this.getIP(ctx) + "]已断开========================");
    }

    /**
     * 发生异常触发
     */
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable t) throws Exception {
        System.out.println("========================[" + this.getIP(ctx) + "]发生异常：" + t+"========================");
        ctx.close();
    }

    /**
     * 获取IP地址
     */
    private String getIP(ChannelHandlerContext ctx) {
        String socketString = ctx.channel().remoteAddress().toString();
        int index = socketString.indexOf(":");
        String ip = socketString.substring(1, index);
        return ip;
    }

}
